package org.example.scoresystem_backen.dto;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import org.example.scoresystem_backen.entity.Admin;

/**
 * 管理员数据传输对象
 * 用于前端展示，隐藏敏感信息如密码
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AdminDTO {

    /**
     * 管理员id
     */
    private Integer id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 角色：0-学生，1-管理员，2-超级管理员
     */
    private Admin.Role role;

    /**
     * 角色显示名称
     */
    private String roleDisplay;

    /**
     * 从Admin实体转换为AdminDTO
     * @param admin 管理员实体
     * @return AdminDTO对象
     */
    public static AdminDTO fromEntity(Admin admin) {
        if (admin == null) {
            return null;
        }

        AdminDTO dto = new AdminDTO();
        dto.setId(admin.getId());
        dto.setUsername(admin.getUsername());
        dto.setRole(admin.getRole());
        dto.setRoleDisplay(getRoleDisplayName(admin.getRole()));

        return dto;
    }

    /**
     * 获取角色显示名称
     * @param role 角色枚举
     * @return 角色显示名称
     */
    private static String getRoleDisplayName(Admin.Role role) {
        if (role == null) {
            return "未知";
        }
        
        switch (role) {
            case STUDENT:
                return "学生";
            case ADMIN:
                return "管理员";
            case SUPER_ADMIN:
                return "超级管理员";
            default:
                return "未知";
        }
    }
}
